﻿// -------------------------------------------------------------------------
//    @FileName         :    NFWelfareConf.h
//    @Author           :    gaoyi
//    @Date             :    2025-06-30
//    @Email			:    445267987@qq.com
//    @Module           :    NFWelfareConf
//
// -------------------------------------------------------------------------

#pragma once

#include "NFComm/NFObjCommon/NFObject.h"
#include "NFLogicShmTypeDefines.h"
#include "NFWelfareConfOne.h"
#include "DescStore/WelfareDesc.h"

/**
 * @brief 福利配置管理器
 * 
 * 负责管理所有福利活动的配置信息，包括：
 * - 福利配置的加载和缓存
 * - 福利配置的查找和分配
 * - 福利配置的内存管理
 * 
 * 使用共享内存哈希表存储福利配置，支持高效的查找和管理操作。
 * 每个福利配置包含福利的基本信息、时间配置、节点配置等。
 */
class NFWelfareConf
{
public:
    /**
     * @brief 构造函数
     * 根据创建模式初始化配置管理器
     */
    NFWelfareConf();

    /**
     * @brief 析构函数
     */
    ~NFWelfareConf();

    /**
     * @brief 创建初始化
     * @return 成功返回0，失败返回错误码
     */
    int CreateInit();

    /**
     * @brief 恢复初始化
     * @return 成功返回0，失败返回错误码
     */
    int ResumeInit();
public:
    NFWelfareConf(const NFWelfareConf& stConf);
    NFWelfareConf& operator=(const NFWelfareConf& stConf);
public:
    /**
     * @brief 查找福利配置（常量版本）
     * @param welfareId 福利ID
     * @return 返回福利配置指针，未找到返回nullptr
     */
    const NFWelfareConfOne* FindConf(uint64_t welfareId) const;

    /**
     * @brief 查找福利配置（可修改版本）
     * @param welfareId 福利ID
     * @return 返回福利配置指针，未找到返回nullptr
     */
    NFWelfareConfOne* FindConf(uint64_t welfareId);

    NFShmHashMapWithList<uint64_t, NFWelfareConfOne, MAX_WELFARE_WELFARE_NUM>& GetConf() { return m_welfareConf; }
    const NFShmHashMapWithList<uint64_t, NFWelfareConfOne, MAX_WELFARE_WELFARE_NUM>& GetConf() const { return m_welfareConf; }

public:
    /**
     * @brief 分配新的福利配置
     * @param welfareId 福利ID
     * @return 成功返回新分配的配置指针，失败返回nullptr
     * @note 如果福利ID已存在或空间不足，将返回nullptr
     */
    NFWelfareConfOne* AllocConf(uint64_t welfareId);

    /**
     * @brief 重置所有福利配置
     * @return 成功返回0，失败返回错误码
     * @note 清空所有已加载的福利配置
     */
    int Reset();

private:
    /// 福利配置哈希表，使用福利ID作为键
    NFShmHashMapWithList<uint64_t, NFWelfareConfOne, MAX_WELFARE_WELFARE_NUM> m_welfareConf;
};
